package main

import (
	"fmt"
	"github.com/spf13/viper"
	"go.uber.org/zap"
	"go_kafka_log/etcd"
	"go_kafka_log/kafka"
	"go_kafka_log/logger"
	"go_kafka_log/settings"
	"go_kafka_log/tailf"
)

/*
gitee:
https://gitee.com/super__man/go_kafka_log
*/

func main() {

	// 读取配置文件
	err := settings.Init()
	if err != nil {
		fmt.Println("初始化配置文件失败！")

		return
	}
	// 初始化日志系统
	if err := logger.Init(); err != nil {
		fmt.Printf("init logger failed, err: %v\n", err)
		return
	}
	defer zap.L().Sync()

	zap.L().Debug("日志系统初始化成功！")

	println("初始化配置文件成功！")

	// 初始化kafka 系统
	addr := viper.GetString("kafka.server_addr")
	fmt.Println(addr)

	err = kafka.Init([]string{addr})
	if err != nil {
		fmt.Printf("init kafka failed ,err:%v\n", err)
		return
	}
	fmt.Println("init kafka success")
	// 初始化 etcd 系统
	// 从 etcd 拉取 配置项

	etcdAddr := viper.GetString("etcd.server_addr")
	err = etcd.Init([]string{etcdAddr})
	if err != nil {
		fmt.Printf("init etcd failed ,err:%v\n", err)
		return
	}
	println("init etcd success!")

	// 获取 最新日志配置信息

	allConfSlice, err := etcd.GetConf(viper.GetString("etcd.collect_key"))
	if err != nil {
		zap.L().Error("从 etcd 获取 配置信息失败， err:", zap.Error(err))
		return
	}
	// 监控 etcd的配合变化
	// 非阻塞
	go etcd.WatchConf(viper.GetString("etcd.collect_key"))

	// 初始化 taillog 系统
	//fileName := viper.GetString("collect.log_path")
	err = tailf.Init(allConfSlice)
	if err != nil {
		fmt.Printf("init taillog failed, err:%v\n", err)
		return
	}
	fmt.Println("init taillog success")

	run()
}
func run() {
	for {
		select {}

	}
}

//func run() {
//	for {
//		select {
//		// 从 tail channel 获取信息
//		case line := <- tailf.ReadChan():
//			// 如果是空行，略过
//			if len(line.Text) == 0 {
//				continue
//			}
//			topic := viper.GetString("collect.topic")
//
//			// 将日志的最新信息 打入 kafka包的 MsgChan,而不是直接发送给 kafka对应的数据的分区
//			kafka.SendToKafka(topic, line.Text)
//		//default:
//		//	zap.L().Debug(time.Now().String())
//		//	time.Sleep(time.Millisecond * 2000)
//		}
//
//	}
//}
